home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / CIncludes / BlockStorage.h < prev    next >
C/C++ Source or Header  |  1996-05-01  |  72KB  |  1,979 lines

  1. /*
  2.      File:        BlockStorage.h
  3.  
  4.      Contains:    External interfaces to Block Storage Family
  5.  
  6.      Version:    Technology:    Copland
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. */
  18. #ifndef __BLOCKSTORAGE__
  19. #define __BLOCKSTORAGE__
  20.  
  21. #ifndef __TYPES__
  22. #include <Types.h>
  23. #endif
  24. #ifndef __MATH64__
  25. #include <Math64.h>
  26. #endif
  27. #ifndef __ERRORS__
  28. #include <Errors.h>
  29. #endif
  30. #ifndef __NAMEREGISTRY__
  31. #include <NameRegistry.h>
  32. #endif
  33. #ifndef __IOMEMORYLISTS__
  34. #include <IOMemoryLists.h>
  35. #endif
  36. #ifndef __IOITERATOR__
  37. #include <IOIterator.h>
  38. #endif
  39.  
  40. #ifdef __cplusplus
  41. extern "C" {
  42. #endif
  43.  
  44. #if PRAGMA_IMPORT_SUPPORTED
  45. #pragma import on
  46. #endif
  47.  
  48. #if PRAGMA_ALIGN_SUPPORTED
  49. #pragma options align=power
  50. /* the following contents can only be used by compilers that support PowerPC struct alignment */
  51.  
  52. #if FOR_SYSTEM8_PREEMPTIVE
  53. /*
  54. ******************************************************************************
  55.  *******************************************************************************
  56.  *******************************************************************************
  57.  
  58.  Block Storage Constants
  59.     
  60.  *******************************************************************************
  61.  *******************************************************************************
  62.  *****************************************************************************
  63. */
  64. /*
  65. ******************************************************************************
  66.     
  67.     Store property names
  68.     
  69.  *****************************************************************************
  70. */
  71. #define kBlockStorageStoreID                "Id"
  72. #define kBlockStorageStoreSize                "BSStoreSize"
  73. #define kBlockStorageStoreReadBlockSize        "BSStoreReadBlockSize"
  74. #define kBlockStorageStoreWriteBlockSize    "BSStoreWriteBlockSize"
  75. #define kBlockStorageStoreContainer            "BSStoreContainer"
  76. #define kBlockStorageStoreParent            "BSStoreParent"
  77. #define kBlockStorageStoreType                "BSStoreType"
  78. #define kBlockStorageStoreDevice            "BSStoreDevice"
  79. #define kBlockStorageEjectable                "BSStoreEjectable"
  80. #define kBlockStorageBootDevice                "BSStoreBootDevice"
  81. #define kBlockStorageWritable                "BSStoreWritable"
  82. #define kBlockStorageMappingPlugIn            "BSStoreMappingPlugIn"
  83. #define kBlockStoragePartitioningPlugIn        "BSStorePartitioningPlugIn"
  84. /*
  85. ******************************************************************************
  86.     
  87.     Container property names
  88.     
  89.  *****************************************************************************
  90. */
  91. #define kBlockStorageContainerParent            "BSStoreParent"
  92. #define kBlockStorageContainerType                "BSStoreType"
  93. #define kBlockStorageEjectable                "BSStoreEjectable"
  94. #define kBlockStorageContainerPlugIn        "BSStoreContainerPlugIn"
  95. /*
  96. ******************************************************************************
  97.  
  98.     StoreOpenOptions is the set of permissions available when making a Connection
  99.     to a Store.  These options can be OR'd together in any combination. 
  100.     
  101.  *****************************************************************************
  102. */
  103.  
  104. enum {
  105.     kBSStoreRead                = 0x00000001,                    /* Allow reading/positioning */
  106.     kBSStoreWrite                = 0x00000002,                    /* Allow writing */
  107.     kBSStoreExclusiveIO            = 0x00000004,                    /* Don't allow another IO Connection to be opened */
  108.     kBSStoreExclusiveCntrl        = 0x00000008,                    /* Don't allow another control Connection to be opened */
  109.     kBSStoreResizeOK            = 0x00000010,                    /* Resizing of the Store is OK (but, of course, notify me) */
  110.     kBSStoreControl                = 0x00000020                    /* Allow me to control the Store */
  111. };
  112.  
  113. typedef UInt32 BSStoreOpenOptions;
  114. /*
  115. ******************************************************************************
  116.  
  117.     BSContainerOpenOptions is the set of permissions available when making a 
  118.     Connection to a Container.  These options can be OR'd together in any combination. 
  119.     
  120.  *****************************************************************************
  121. */
  122.  
  123. enum {
  124.     kBSContainerExclusiveCntrl    = 0x00000001                    /* Don't allow another Connection to be opened */
  125. };
  126.  
  127. typedef UInt32 BSContainerOpenOptions;
  128. /*
  129. ****************************************************************************
  130.      
  131.     Accessibility states
  132.  
  133.      Accessibility States indicate how accessible a Block Storage Container or
  134.          Store is.  There are four currently defined.  Their absolute values 
  135.         are unimportant, but have been split across fairly large ranges to 
  136.         allow for future values to be inserted between them.
  137.  
  138.          kBSOnline and kBSOffline represent the two extremes of accessibility -
  139.          nothing can be less accessible than kBSOffline (that is the state you 
  140.         send a Store to when you are about to delete it) and nothing can be 
  141.         more online than kBSOnline, which means you are fully, 100% available.
  142.         
  143.  ***************************************************************************
  144. */
  145.  
  146. enum {
  147.     kBSOnline                    = 0x0FFFFFFF,
  148.     kBSPowerSave                = 0x0A000000,
  149.     kBSOutOfDrive                = 0x01000000,
  150.     kBSOffline                    = 0
  151. };
  152.  
  153. typedef UInt32 BSAccessibilityState;
  154. /*
  155. ****************************************************************************
  156.     
  157.     Component types
  158.  
  159.  ***************************************************************************
  160. */
  161.  
  162. enum {
  163.     kBSExternalDeviceComponent    = 1,
  164.     kBSStoreComponent            = 2
  165. };
  166.  
  167. typedef UInt32 BSComponentType;
  168. /*
  169. ****************************************************************************
  170.  
  171.     Block List Seek specifiers
  172.     
  173.  ***************************************************************************
  174. */
  175.  
  176. enum {
  177.     kBSBlockListSeekByteAbsolute = 1,
  178.     kBSBlockListSeekByteRelative = 2,
  179.     kBSBlockListSeekExtentAbsolute = 3,
  180.     kBSBlockListSeekExtentRelative = 4,
  181.     kBSBlockListSeekBlockAbsolute = 5,
  182.     kBSBlockListSeekBlockRelative = 6
  183. };
  184.  
  185. typedef UInt32 BSBlockListWhence;
  186. /*
  187. ****************************************************************************
  188.  
  189.     Selectors for BSStoreGetDeviceData - specifies which set of Stores to
  190.         return
  191.  
  192.  ***************************************************************************
  193. */
  194.  
  195. enum {
  196.     kBSStoreGetLeafStores        = 1,
  197.     kBSStoreGetAllStores        = 2,
  198.     kBSStoreGetPrimaryStores    = 3
  199. };
  200.  
  201. typedef UInt32 BSStoreGetSelector;
  202. /*
  203. ****************************************************************************
  204.  
  205.     Format specifiers - these are generic categories.  There may be further
  206.         distinctions within these categories for number of blocks, etc.
  207.     
  208.  ***************************************************************************
  209. */
  210.  
  211. enum {
  212.     kBSFormatFloppyGCR            = 'gcr ',
  213.     kBSFormatFloppyMFM            = 'mfm ',
  214.     kBSFormatSCSI                = 'scsi',
  215.     kBSFormatATA                = 'ata ',
  216.     kBSNotFormatable            = 'none'
  217. };
  218.  
  219. typedef OSType BSStoreFormatType;
  220.  
  221. enum {
  222.     kBSMaxFormats                = 8
  223. };
  224.  
  225. /* Maximum number of formats a Mapping plug-in can support */
  226. /*
  227. ****************************************************************************
  228.  *****************************************************************************
  229.  *****************************************************************************
  230.  
  231.     Block Storage Error codes
  232.     
  233.  *****************************************************************************
  234.  *****************************************************************************
  235.  ***************************************************************************
  236. */
  237. /*
  238. ****************************************************************************
  239.  
  240.     Basic error types
  241.     
  242.  ***************************************************************************
  243. */
  244.  
  245. enum {
  246.     E_Success                    = 0x00000000,
  247.     E_LoopTermination            = 0x08000000,
  248.     E_Underflow                    = 0x10000000,
  249.     E_Overflow                    = 0x18000000,
  250.     E_AlreadyExists                = 0x20000000,
  251.     E_NotFound                    = 0x28000000,
  252.     E_AccessViolation            = 0x30000000,
  253.     E_Busy                        = 0x38000000,
  254.     E_VersionMismatch            = 0x40000000,
  255.     E_Canceled                    = 0x48000000,
  256.     E_OutOfResources            = 0x50000000,
  257.     E_Timeout                    = 0x58000000,
  258.     E_ParameterError            = 0x60000000,
  259.     E_Fatal                        = 0x68000000,
  260.     E_Unknown                    = 0xF8000000
  261. };
  262.  
  263. /*
  264. ****************************************************************************
  265.  
  266.     Block Storage Error ID
  267.     
  268.  ***************************************************************************
  269. */
  270.  
  271. enum {
  272.     E_BlockStorageBias            = 0x04F00000
  273. };
  274.  
  275. /*
  276. ****************************************************************************
  277.  
  278.     Block Storage Error Categories
  279.     
  280.  ***************************************************************************
  281. */
  282.  
  283. enum {
  284.     E_BSFamilyError                = 0x00000000 | E_BlockStorageBias,
  285.     E_BSExpertError                = 0x00008000 | E_BlockStorageBias,
  286.     E_BSMappingPlugInError        = 0x00010000 | E_BlockStorageBias,
  287.     E_BSPartitioningPlugInError    = 0x00018000 | E_BlockStorageBias,
  288.     E_BSContainerPlugInError    = 0x00020000 | E_BlockStorageBias,
  289.     E_BSBlockListError            = 0x00028000 | E_BlockStorageBias,
  290.     E_BSSuccess                    = E_Success
  291. };
  292.  
  293. /*
  294. ****************************************************************************
  295.  
  296.     Family Errors
  297.     
  298.  ***************************************************************************
  299. */
  300.  
  301. enum {
  302.     E_BSOutOfResources            = 0x00000001 | E_OutOfResources | E_BSFamilyError,
  303.     E_BSStoreInUse                = 0x00000001 | E_AccessViolation | E_BSFamilyError,
  304.     E_BSStoreWriteProtected        = 0x00000002 | E_AccessViolation | E_BSFamilyError,
  305.     E_BSStoreNotFound            = 0x00000001 | E_NotFound | E_BSFamilyError,
  306.     E_BSBadMessage                = 0x00000001 | E_ParameterError | E_BSFamilyError,
  307.     E_BSBadConnection            = 0x00000002 | E_ParameterError | E_BSFamilyError,
  308.     E_BSTableTooSmall            = 0x00000003 | E_ParameterError | E_BSFamilyError,
  309.     E_BSNullParameters            = 0x00000004 | E_ParameterError | E_BSFamilyError,
  310.     E_BSParameterError            = 0x00000005 | E_ParameterError | E_BSFamilyError,
  311.     E_BSUnimplemented            = 0x00000001 | E_VersionMismatch | E_BSFamilyError
  312. };
  313.  
  314. /*
  315. ****************************************************************************
  316.  
  317.     Expert Errors
  318.     
  319.  ***************************************************************************
  320. */
  321.  
  322. enum {
  323.     E_BSEPlugInNotFound            = 0x00000001 | E_NotFound | E_BSExpertError,
  324.     E_BSENoPlugInMatch            = 0x00000002 | E_NotFound | E_BSExpertError,
  325.     E_BSENoMoreStores            = 0x00000001 | E_OutOfResources | E_BSExpertError,
  326.     E_BSEHierarchyTooDeep        = 0x00000002 | E_OutOfResources | E_BSExpertError,
  327.     E_BSEOutOfResources            = 0x00000003 | E_OutOfResources | E_BSExpertError
  328. };
  329.  
  330. /*
  331. ****************************************************************************
  332.  
  333.     Mapping Plug-in Errors
  334.     
  335.  ***************************************************************************
  336. */
  337.  
  338. enum {
  339.     E_BSMPIOutOfStoreBounds        = 0x00000001 | E_ParameterError | E_BSMappingPlugInError,
  340.     E_BSMPITooManyMappings        = 0x00000002 | E_ParameterError | E_BSMappingPlugInError,
  341.     E_BSMPIBadMappingParams        = 0x00000003 | E_ParameterError | E_BSMappingPlugInError,
  342.     E_BSMPIMappingNotSupported    = 0x00000004 | E_ParameterError | E_BSMappingPlugInError,
  343.     E_BSMPIStateNotSupported    = 0x00000005 | E_ParameterError | E_BSMappingPlugInError,
  344.     E_BSMPIWriteProtected        = 0x00000001 | E_AccessViolation | E_BSMappingPlugInError,
  345.     E_BSMPICannotGoToState        = 0x00000002 | E_AccessViolation | E_BSMappingPlugInError,
  346.     E_BSMPIUnitNotResponding    = 0x00000001 | E_Fatal | E_BSMappingPlugInError,
  347.     E_BSMPITransferError        = 0x00000002 | E_Fatal | E_BSMappingPlugInError,
  348.     E_BSMPIMemoryAccessFault    = 0x00000003 | E_Fatal | E_BSMappingPlugInError,
  349.     E_BSMPINoPlugIn                = 0x00000004 | E_Fatal | E_BSMappingPlugInError,
  350.     E_BSMPIMediaRemoved            = 0x00000005 | E_Fatal | E_BSMappingPlugInError,
  351.     E_BSMPIOutOfResources        = 0x00000001 | E_OutOfResources | E_BSMappingPlugInError
  352. };
  353.  
  354. /*
  355. ****************************************************************************
  356.  
  357.     Partitioning Plug-in Errors
  358.     
  359.  ***************************************************************************
  360. */
  361.  
  362. enum {
  363.     E_BSPPIMappingNotSupported    = 0x00000001 | E_ParameterError | E_BSPartitioningPlugInError,
  364.     E_BSPPIOverlappingPartition    = 0x00000002 | E_ParameterError | E_BSPartitioningPlugInError,
  365.     E_BSPPIOutOfStoreBounds        = 0x00000003 | E_ParameterError | E_BSPartitioningPlugInError,
  366.     E_BSPPIPartitionNonExistant    = 0x00000004 | E_ParameterError | E_BSPartitioningPlugInError,
  367.     E_BSPPITooManyPartitions    = 0x00000005 | E_ParameterError | E_BSPartitioningPlugInError,
  368.     E_BSPPINoPlugIn                = 0x00000001 | E_Fatal | E_BSPartitioningPlugInError,
  369.     E_BSPPIOutOfResources        = 0x00000002 | E_OutOfResources | E_BSPartitioningPlugInError
  370. };
  371.  
  372. /*
  373. ****************************************************************************
  374.  
  375.     Container Plug-in Errors
  376.     
  377.  ***************************************************************************
  378. */
  379. /*
  380. ****************************************************************************
  381.  
  382.     Block List Errors
  383.     
  384.  ***************************************************************************
  385. */
  386.  
  387. enum {
  388.     E_BSBLEndOfList                = 0x00000001 | E_Underflow | E_BSBlockListError,
  389.     E_BSBLParameterError        = 0x00000001 | E_ParameterError | E_BSBlockListError,
  390.     E_BSBLBadBlockList            = 0x00000002 | E_ParameterError | E_BSBlockListError,
  391.     E_BSBLBadBlock                = 0x00000003 | E_ParameterError | E_BSBlockListError,
  392.     E_BSBLAlreadyFinalized        = 0x00000001 | E_AlreadyExists | E_BSBlockListError,
  393.     E_BSBLOutOfResources        = 0x00000001 | E_OutOfResources | E_BSBlockListError
  394. };
  395.  
  396. /*
  397. ****************************************************************************
  398.  *****************************************************************************
  399.  *****************************************************************************
  400.  
  401.  Block Storage Types and Structures
  402.  
  403.  *****************************************************************************
  404.  *****************************************************************************
  405.  ***************************************************************************
  406. */
  407. /*
  408. ****************************************************************************
  409.  
  410.     Store and Container Persistent Identifiers
  411.     
  412.  ***************************************************************************
  413. */
  414. typedef char BSStoreID[12];
  415. typedef char BSContainerID[12];
  416. /*
  417. ****************************************************************************
  418.  
  419.     Connection ID's
  420.     
  421.  ***************************************************************************
  422. */
  423. typedef ObjectID BSContainerConnID;
  424. typedef ObjectID BSStoreConnID;
  425. /*
  426. ****************************************************************************
  427.  
  428.     Plug-in run-time references.  References the plug-in in general, not
  429.         a specific instance of it
  430.     
  431.  ***************************************************************************
  432. */
  433. typedef struct OpaqueBSMappingPlugInRef* BSMappingPlugInRef;
  434. typedef struct OpaqueBSPartitioningPlugInRef* BSPartitioningPlugInRef;
  435. typedef struct OpaqueBSContainerPlugInRef* BSContainerPlugInRef;
  436. /*
  437. ****************************************************************************
  438.  
  439.     Store and Container Run-Time References
  440.     
  441.  ***************************************************************************
  442. */
  443. typedef RegEntryRef BSStoreRef;
  444. typedef RegEntryRef BSContainerRef;
  445. /*
  446. ****************************************************************************
  447.  
  448.     Store and Container Navigation API types
  449.     
  450.  ***************************************************************************
  451. */
  452. typedef ObjectID BSStoreIteratorID;
  453. typedef ObjectID BSContainerIteratorID;
  454. typedef RegPropertyInstance BSStorePropertyInstance;
  455. typedef RegPropertyInstance BSContainerPropertyInstance;
  456. /*
  457. ****************************************************************************
  458.  
  459.     Device block descriptor types
  460.     
  461.  ***************************************************************************
  462. */
  463. typedef UInt64 BSByteCount;
  464. typedef struct OpaqueBSBlockListRef* BSBlockListRef;
  465. typedef struct OpaqueBSBlockListDescriptorRef* BSBlockListDescriptorRef;
  466. /*
  467. ******************************************************************************
  468.  
  469.     BSBlockListDescriptorInfo - information about a Block List Descriptor
  470.     
  471.  *****************************************************************************
  472. */
  473. struct BSBlockListDescriptorInfo {
  474.     BSByteCount                     bias;
  475.     BSByteCount                     start;
  476.     UInt32                             length;
  477.     BSBlockListDescriptorRef         parentDescriptor;
  478.     BSBlockListRef                     parentList;
  479. };
  480. typedef struct BSBlockListDescriptorInfo BSBlockListDescriptorInfo;
  481.  
  482. typedef BSBlockListDescriptorInfo *BSBlockListDescriptorInfoPtr;
  483. /*
  484. ****************************************************************************
  485.  
  486.     BSStoreFormatInfo
  487.     
  488.  ***************************************************************************
  489. */
  490. typedef ItemCount BSFormatIndex;
  491. struct BSStoreFormatInfo {
  492.     BSStoreFormatType                 formatType;
  493.     BSByteCount                     formatSize;
  494.     BSFormatIndex                     formatNum;                    /* Format identifier - specific to Mapping plug-in */
  495. };
  496. typedef struct BSStoreFormatInfo BSStoreFormatInfo;
  497.  
  498. /*
  499. ****************************************************************************
  500.  
  501.     BSStoreInfo is used to return information about a Store
  502.     
  503.  ***************************************************************************
  504. */
  505. struct BSStoreInfo {
  506.     BSStoreID                         storeID;
  507.     BSByteCount                     storeSize;
  508.     BSByteCount                     readBlockSize;                /* minimum read size & granularity */
  509.     BSByteCount                     writeBlockSize;                /* minimum write size & granularity */
  510.     BSContainerRef                     container;                    /* the container containing this Store */
  511.     ItemCount                         numChildren;
  512.     ItemCount                         numParents;
  513.  
  514.     ItemCount                         numPartitions;                /* Number of partitions in use */
  515.     ItemCount                         maxPartitions;                /* Maximum number of partitions possible */
  516.  
  517.     Boolean                         isPartitioned;                /* True if a partitioning plug-in is associated with this Store */
  518.  
  519.     Boolean                         isEjectable;
  520.     Boolean                         isBootDevice;
  521.     Boolean                         isWriteable;
  522.     Boolean                         hasAutoEjectHardware;
  523.     Boolean                         isFormattable;
  524.  
  525.     Boolean                         isPartitionable;
  526.     Boolean                         isFilesystem;
  527.  
  528.     BSMappingPlugInRef                 mappingPlugIn;
  529.     BSPartitioningPlugInRef         partitioningPlugIn;
  530.  
  531.     BSStoreFormatInfo                 curFormat;
  532.  
  533.     BSStoreFormatInfo                 possibleFormats[8];
  534.  
  535.     Str255                             name;                        /* Max name size is 255 (0 terminated) */
  536.     Str32                             typeName;                    /* Max type name is 32 (0 terminated) */
  537. };
  538. typedef struct BSStoreInfo BSStoreInfo;
  539.  
  540. typedef BSStoreInfo *BSStoreInfoPtr;
  541. /*
  542. ****************************************************************************
  543.  
  544.     BSContainerInfo is used to return information about a Container
  545.     
  546.  ***************************************************************************
  547. */
  548. struct BSContainerInfo {
  549.     RegEntryRef                     device;
  550.     ItemCount                         numChildren;
  551.     Boolean                         ejectable;
  552. };
  553. typedef struct BSContainerInfo BSContainerInfo;
  554.  
  555. typedef BSContainerInfo *BSContainerInfoPtr;
  556. /*
  557. ****************************************************************************
  558.  
  559.     BSPartitionInfo is used to return information about a Partition
  560.     
  561.  ***************************************************************************
  562. */
  563. struct BSPartitionDescriptor {
  564.     ItemCount                         entryNum;
  565.     BSByteCount                     start;
  566.     BSByteCount                     len;
  567.     BSStoreID                         destStoreID;
  568.     Boolean                         isPartitionable;
  569.     Boolean                         isFilesystem;
  570.     Boolean                         reserved1;
  571.     Boolean                         reserved2;
  572.     Str255                             name;                        /* Max name size is 255 (0 terminated) */
  573.     Str32                             typeName;                    /* Max type name is 32 (0 terminated) */
  574. };
  575. typedef struct BSPartitionDescriptor BSPartitionDescriptor;
  576.  
  577. typedef BSPartitionDescriptor *BSPartitionDescriptorPtr;
  578. /*
  579. ****************************************************************************
  580.  
  581.     BSStoreComponent describes a component of a Store.  A component may
  582.     be an external device or another Store.  
  583.     
  584.  ***************************************************************************
  585. */
  586. struct BSStoreComponent {
  587.     BSComponentType                 componentType;
  588.     BSByteCount                     startingOffset;                /* Where in the Store this */
  589.                                                                 /* component will be placed */
  590.     RegEntryRef                     sourceNode;                    /* Physical components */
  591.     BSStoreRef                         srcStore;                    /* Logical components */
  592.     BSPartitionDescriptor             partitionInfo;                /* Logical components */
  593. };
  594. typedef struct BSStoreComponent BSStoreComponent;
  595.  
  596. typedef BSStoreComponent *BSStoreComponentPtr;
  597. /*
  598. ****************************************************************************
  599.  
  600.  ***************************************************************************
  601. */
  602. struct BSStoreIOIteratorData {
  603.     IOCommonInfo                     IOCI;
  604.     BSStoreInfo                     info;
  605. };
  606. typedef struct BSStoreIOIteratorData BSStoreIOIteratorData;
  607.  
  608. /*
  609. ****************************************************************************
  610.  *****************************************************************************
  611.  *****************************************************************************
  612.  
  613.     Block Storage API Functions
  614.     
  615.     These functions make up the Block Storage API.  All functions are callable
  616.     from the user or privileged bands.  The API is split into the following
  617.     sections:
  618.     
  619.         Navigation - operations to find a Store or Container and its 
  620.             relationship to other Stores and Containers
  621.             
  622.         Connections - operations to open and close connections with Stores and
  623.             Containers
  624.             
  625.         Block Lists - operations to create and manipulate Block Lists, used
  626.             as inputs for I/O operations
  627.             
  628.         I/O - operations to read and write date to Stores
  629.         
  630.         Accessibility - operations to change the accessibility of Store and
  631.             Containers.  Power-down and eject are handled via this interface
  632.             
  633.         Configuration - operations to add new devices, replace plug-ins,
  634.             format and partition Stores and modify the relationships of 
  635.             Stores and Containers to each other.
  636.     
  637.  *****************************************************************************
  638.  *****************************************************************************
  639.  ***************************************************************************
  640. */
  641. /*
  642. ****************************************************************************
  643.  *****************************************************************************
  644.  
  645.     Block Storage Navigation API
  646.     
  647.  *****************************************************************************
  648.  ***************************************************************************
  649. */
  650. /*
  651. ******************************************************************************
  652.     
  653.     BSStoreGetDeviceData - a simple iteration model to retrieve all of the
  654.         Stores, the leaf Stores or the primary Stores.
  655.     
  656.     Inputs:        selector - which set of Stores to retrieve
  657.                     kBSStoreGetLeafStores retrieves leaf stores
  658.                     kBSStoreGetAllStores retrieves all stores
  659.                     kBSStoreGetPrimaryStores retrieves only primary stores
  660.                 requestItemCount - the size of the buffer
  661.     
  662.     Outputs:    iteratorData - the array of BSStoreIOIteratorData structures
  663.                     to be filled in
  664.                 totalItemCount - the actual number of items available (may be
  665.                     more than requestItemCount, though only requestItemCount
  666.                     structures will be filled in in iteratorData)
  667.     
  668.     Returns:    E_BSSuccess if successful
  669.                 
  670.     
  671.  *****************************************************************************
  672. */
  673. extern OSStatus BSStoreGetDeviceData(BSStoreGetSelector selector, ItemCount requestItemCount, ItemCount *totalItemCount, BSStoreIOIteratorData *iteratorData);
  674.  
  675. /*
  676. ******************************************************************************
  677.     
  678.     BSStoreIteratorCreate - Creates an iterator for Block Storage Stores which
  679.         will be initially placed on startingStore.  If starting Store is NULL
  680.         the iterator will be placed "in the soup" at the root of the Store
  681.         hierarchy
  682.  
  683.     Inputs:        startingStore - the Store to begin at
  684.     
  685.     Outputs:    newIterator - the returned iterator
  686.     
  687.     Returns:    E_BSSuccess if successful
  688.                 
  689.     
  690.  *****************************************************************************
  691. */
  692. extern OSStatus BSStoreIteratorCreate(BSStoreRef *startingStore, BSStoreIteratorID *newIterator);
  693.  
  694. /*
  695. ******************************************************************************
  696.     
  697.     BSStoreIteratorDispose - disposes of an iterator, freeing all resources
  698.         associated with it
  699.     
  700.     Inputs:        disposeIterator - the iterator to dispose
  701.     
  702.     Outputs:    <none>
  703.     
  704.     Returns:    E_BSSuccess if successful
  705.     
  706.  *****************************************************************************
  707. */
  708. extern OSStatus BSStoreIteratorDispose(BSStoreIteratorID disposeIterator);
  709.  
  710. /*
  711. ******************************************************************************
  712.     
  713.     BSStoreIteratorEnter - Moves the iterator into the child the iterator is
  714.         currently on, placing it on the first child
  715.     
  716.     Inputs:        iterator - the iterator to move
  717.     
  718.     Outputs:    newStore - the Store we've just exited
  719.     
  720.     Returns:    E_BSSuccessful
  721.     
  722.  *****************************************************************************
  723. */
  724. extern OSStatus BSStoreIteratorEnter(BSStoreIteratorID iterator, BSStoreRef *newStore);
  725.  
  726. /*
  727. ******************************************************************************
  728.     
  729.     BSStoreIteratorExit - Moves the iterator into the parent the iterator is
  730.         currently on, placing the iterator on the Store it exited.
  731.     
  732.     Inputs:        iterator - the iterator to move
  733.     
  734.     Outputs:    newStore - the Store we've been placed on
  735.     
  736.     Returns:    E_BSSuccess if successful
  737.     
  738.  *****************************************************************************
  739. */
  740. extern OSStatus BSStoreIteratorExit(BSStoreIteratorID iterator, BSStoreRef *newStore);
  741.  
  742. /*
  743. ******************************************************************************
  744.     
  745.     BSStoreIteratorRestartChildren - Places the iterator on the first child
  746.         in the current Store
  747.     
  748.     Inputs:        iterator - the iterator to restart
  749.     
  750.     Outputs:    newChild - the child we've been placed on
  751.     
  752.     Returns:    E_BSSuccess if succesful
  753.     
  754.  *****************************************************************************
  755. */
  756. extern OSStatus BSStoreIteratorRestartChildren(BSStoreIteratorID iterator, BSStoreRef *newChild);
  757.  
  758. /*
  759. ******************************************************************************
  760.     
  761.     BSStoreIteratorRestartParent - Places the iterator on the first parent
  762.         in the current Store
  763.     
  764.     Inputs:        iterator - the iterator to restart
  765.     
  766.     Outputs:    newParent - the parent we've been placed on
  767.     
  768.     Returns:    E_BSSuccess if succesful
  769.     
  770.  *****************************************************************************
  771. */
  772. extern OSStatus BSStoreIteratorRestartParent(BSStoreIteratorID iterator, BSStoreRef *newParent);
  773.  
  774. /*
  775. ******************************************************************************
  776.     
  777.     BSStoreIteratorNextChild - Moves the iterator to the next child
  778.     
  779.     Inputs:        iterator - the iterator to move
  780.     
  781.     Outputs:    newChild - the child we've been placed on
  782.                 changed - true if a parent or child has been added or deleted
  783.                         to this Store since the last BSStoreIteratorNextChild or 
  784.                         BSStoreIteratorNextParent call
  785.     
  786.     Returns:    E_BSSuccess if successful
  787.     
  788.  *****************************************************************************
  789. */
  790. extern OSStatus BSStoreIteratorNextChild(BSStoreIteratorID iterator, BSStoreRef *newChild, Boolean *changed);
  791.  
  792. /*
  793. ******************************************************************************
  794.     
  795.     BSStoreIteratorNextParent - Moves the iterator to the next parent
  796.     
  797.     Inputs:        iterator - iterator to move
  798.                     changed - true if a parent or child has been added or deleted
  799.                         since the last BSStoreIteratorNextChild or 
  800.                         BSStoreIteratorNextParent call
  801.                         
  802.     Outputs:    newParent - the parent we've been placed on
  803.     
  804.     Returns:    E_BSSuccess if successful
  805.     
  806.  *****************************************************************************
  807. */
  808. extern OSStatus BSStoreIteratorNextParent(BSStoreIteratorID iterator, BSStoreRef *newParent, Boolean *changed);
  809.  
  810. /*
  811. ******************************************************************************
  812.     
  813.     BSContainerIteratorCreate - Creates an iterator for Block Storage Containers
  814.         which will be initially placed on startingContainer.  If starting 
  815.         Container is NULL the iterator will be placed "in the soup" at the root 
  816.         of the Container hierarchy.
  817.     
  818.     Inputs:        startingContainer - the container to start at or NULL to start
  819.                     at the root of the Container hierarchy
  820.     
  821.     Outputs:    newIterator - the created iterator
  822.     
  823.     Returns:    E_BSSuccess if successful
  824.     
  825.  *****************************************************************************
  826. */
  827. extern OSStatus BSContainerIteratorCreate(BSContainerRef *startingContainer, BSContainerIteratorID *newIterator);
  828.  
  829. /*
  830. ******************************************************************************
  831.     
  832.     BSContainerIteratorDispose - disposes of an iterator, freeing all resources
  833.         associated with it
  834.     
  835.     Inputs:        disposeIterator - the iterator to dispose
  836.     
  837.     Outputs:    <none>
  838.     
  839.     Returns:    E_BSSuccess if successful
  840.     
  841.  *****************************************************************************
  842. */
  843. extern OSStatus BSContainerIteratorDispose(BSContainerIteratorID disposeIterator);
  844.  
  845. /*
  846. ******************************************************************************
  847.     
  848.     BSContainerIteratorEnter - Moves the iterator into the child the iterator is
  849.         currently on, placing it on the first child
  850.     
  851.     Inputs:        iterator - the iterator to move
  852.     
  853.     Outputs:    newContainer - the Container we've been placed on
  854.     
  855.     Returns:    E_BSSuccess if successful
  856.     
  857.  *****************************************************************************
  858. */
  859. extern OSStatus BSContainerIteratorEnter(BSContainerIteratorID iterator, BSContainerRef *newContainer);
  860.  
  861. /*
  862. ******************************************************************************
  863.     
  864.     BSContainerIteratorExit - exits to the parent of the current Container,
  865.         placing the iterator on the Container it exited.  (Containers may have
  866.         only one parent)
  867.     
  868.     Inputs:        iterator - the iterator to move
  869.     
  870.     Outputs:    newContainer - the Container we've just exited
  871.     
  872.     Returns:    E_BSSuccess if successful
  873.     
  874.  *****************************************************************************
  875. */
  876. extern OSStatus BSContainerIteratorExit(BSContainerIteratorID iterator, BSContainerRef *newContainer);
  877.  
  878. /*
  879. ******************************************************************************
  880.     
  881.     BSContainerIteratorRestartChildren - Places the iterator on the first child 
  882.         in the current Container
  883.     
  884.     Inputs:        iterator - the iterator to restart
  885.     
  886.     Outputs:    newChild - the child we've been placed on
  887.     
  888.     Returns:    E_BSSuccess if succesful    
  889.     
  890.  *****************************************************************************
  891. */
  892. extern OSStatus BSContainerIteratorRestartChildren(BSContainerIteratorID iterator, BSContainerRef *newChild);
  893.  
  894. /*
  895. ******************************************************************************
  896.     
  897.     BSContainerIteratorNextChild - Moves the iterator to the next child
  898.     
  899.     Inputs:        iterator - the iterator to move
  900.     
  901.     Outputs:    newChild - the child we've been placed on
  902.                 changed - true if a child has been added or deleted to this 
  903.                 Container since the last BSContainerIteratorNextChild.
  904.     
  905.     Returns:    E_BSSuccess if successful    
  906.     
  907.  *****************************************************************************
  908. */
  909. extern OSStatus BSContainerIteratorNextChild(BSContainerIteratorID iterator, BSContainerRef *newChild);
  910.  
  911. /*
  912. ******************************************************************************
  913.     
  914.     BSStoreFindByID - finds a Store by its identifier and returns a ref
  915.     
  916.     Inputs:        storeID - the Store ID to find
  917.     
  918.     Outputs:    foundStore - the found reference
  919.     
  920.     Returns:    E_BSSuccess if successful
  921.     
  922.  *****************************************************************************
  923. */
  924. extern OSStatus BSStoreFindByID(BSStoreID storeID, BSStoreRef *foundStore);
  925.  
  926. /*
  927. ******************************************************************************
  928.     
  929.     BSStoreGetPropertySize - retrieves the size of the named property from the 
  930.                 Store.
  931.     
  932.     Inputs:        store - the Store to retrieve the property from
  933.                 propertyName - the name of the property to retrieve the size of
  934.                 propertyInstance - the instance of the property within this Store
  935.     
  936.     Outputs:    propertySize - filled in with the size of the property
  937.     
  938.     Returns:    E_BSSuccess if successful
  939.     
  940.  *****************************************************************************
  941. */
  942. extern OSStatus BSStoreGetPropertySize(BSStoreRef *store, char *propertyName, BSStorePropertyInstance propertyInstance, ByteCount *propertySize);
  943.  
  944. /*
  945. ******************************************************************************
  946.     
  947.     BSStoreGetProperty - retrieves the named property from the Store.
  948.     
  949.     Inputs:        store - the Store to retrieve the property from
  950.                 propertyName - the name of the property to retrieve the size of
  951.                 propertyInstance - the instance of the property within this Store
  952.                 propertySize - the size of the buffer passed in (on input)
  953.                 
  954.     Outputs:    propertyValue - a pointer to the buffer to be filled in
  955.                 propertySize - the size filled in (on exit)
  956.     
  957.     Returns:    E_BSSuccess if successful
  958.     
  959.  *****************************************************************************
  960. */
  961. extern OSStatus BSStoreGetProperty(BSStoreRef *store, char *propertyName, BSStorePropertyInstance propertyInstance, void *propertyValue, ByteCount *propertySize);
  962.  
  963. /*
  964. ******************************************************************************
  965.     
  966.     BSContainerGetPropertySize - retrieves the size of the named property from 
  967.                 the Container.
  968.     
  969.     Inputs:        container - the Container to retrieve the property from
  970.                 propertyName - the name of the property to retrieve the size of
  971.                 propertyInstance - the instance of the property within this Store
  972.     
  973.     Outputs:    propertySize - filled in with the size of the property
  974.     
  975.     Returns:    E_BSSuccess if successful
  976.     
  977.  *****************************************************************************
  978. */
  979. extern OSStatus BSContainerGetPropertySize(BSContainerRef *container, char *propertyName, BSContainerPropertyInstance propertyInstance, ByteCount *propertySize);
  980.  
  981. /*
  982. ******************************************************************************
  983.     
  984.     BSContainerGetProperty - retrieves the named property from the Container.
  985.     
  986.     Inputs:        container - the Container to retrieve the property from
  987.                 propertyName - the name of the property to retrieve the size of
  988.                 propertyInstance - the instance of the property within this 
  989.                     Container
  990.                 propertySize - the size of the buffer passed in (on input)
  991.                 
  992.     Outputs:    propertyValue - a pointer to the buffer to be filled in
  993.                 propertySize - the size filled in (on exit)
  994.     
  995.     Returns:    E_BSSuccess if successful
  996.  
  997.  *****************************************************************************
  998. */
  999. extern OSStatus BSContainerGetProperty(BSContainerRef *container, char *propertyName, BSContainerPropertyInstance propertyInstance, ByteCount *propertySize);
  1000.  
  1001. /*
  1002. ****************************************************************************
  1003.  *****************************************************************************
  1004.  
  1005.     Block Storage Connection Operations
  1006.     
  1007.  *****************************************************************************
  1008.  ***************************************************************************
  1009. */
  1010. /*
  1011. ******************************************************************************
  1012.  
  1013.     BSStoreOpen - Opens a Connection to a Store
  1014.  
  1015.     Inputs:        store    - the Store to be opened
  1016.                 options    - options to the connection
  1017.  
  1018.     Outputs:     newConnection    - the created connection if successful
  1019.  
  1020.     Returns:    E_BSSuccess on success
  1021.                 E_BSOutOfResources if resources for the connection cannot be allocated
  1022.                 E_BSStoreInUse if the Store has an exclusive connection or if an
  1023.                     exclusive connection was requested to a Store with any connections
  1024.                     open.
  1025.                 E_BSStoreWriteProtected if Write access was requested to a read only
  1026.                     Store
  1027.                 E_BSStoreNotFound if store did not match any existing Stores
  1028.  
  1029.  *****************************************************************************
  1030. */
  1031. extern OSStatus BSStoreOpen(BSStoreRef *store, BSStoreOpenOptions options, BSStoreConnID *newConnection);
  1032.  
  1033. /*
  1034. ******************************************************************************
  1035.  
  1036.     BSStoreConnClose - closes a Connection to a Store
  1037.  
  1038.     Inputs:        connection - the connection to be closed
  1039.  
  1040.     Outputs:    <none>
  1041.  
  1042.     Returns:    E_BSSuccess if successful
  1043.                 E_BSBadConnection if the connection ID has problems
  1044.  
  1045.  *****************************************************************************
  1046. */
  1047. extern OSStatus BSStoreConnClose(BSStoreConnID connection);
  1048.  
  1049. /*
  1050. ******************************************************************************
  1051.  
  1052.     BSContainerOpen - Opens a Connection to a Container
  1053.  
  1054.     Inputs:        container    - the Container to be opened
  1055.                 options    - options to the connection
  1056.  
  1057.     Outputs:     newConnection    - the created connection if successful
  1058.  
  1059.     Returns:    E_BSSuccess on success
  1060.                 E_BSOutOfResources if resources for the connection cannot be allocated
  1061.                 E_BSContainerInUse if the Container has an exclusive connection or if an
  1062.                     exclusive connection was requested to a Container with any connections
  1063.                     open.
  1064.                 E_BSContainerNotFound if container did not match any existing Containers
  1065.  
  1066.  *****************************************************************************
  1067. */
  1068. extern OSStatus BSContainerOpen(BSContainerRef *container, BSContainerOpenOptions options, BSContainerConnID *newConnection);
  1069.  
  1070. /*
  1071. ******************************************************************************
  1072.  
  1073.     BSContainerConnClose - closes a Connection to a Container
  1074.  
  1075.     Inputs:        connection - the connection to be closed
  1076.  
  1077.     Outputs:    <none>
  1078.  
  1079.     Returns:    E_BSSuccess if successful
  1080.                 E_BSBadConnection if the connection ID has problems
  1081.  
  1082.  *****************************************************************************
  1083. */
  1084. extern OSStatus BSContainerConnClose(BSContainerConnID connection);
  1085.  
  1086. /*
  1087. ****************************************************************************
  1088.  *****************************************************************************
  1089.  
  1090.     Block Storage Block List Operations
  1091.     
  1092.  *****************************************************************************
  1093.  ***************************************************************************
  1094. */
  1095. /*
  1096. ******************************************************************************
  1097.     
  1098.     BSBlockListCreate - Creates a block list for use with Block Storage
  1099.     
  1100.     Inputs:        numAnticipatedRange - the number of ranges expected
  1101.     
  1102.     Outputs:    newList - the new list to which ranges may be added
  1103.     
  1104.     Returns:    E_BSSuccess if successful
  1105.     
  1106.  *****************************************************************************
  1107. */
  1108. extern OSStatus BSBlockListCreate(ItemCount numAnticipatedRanges, BSBlockListRef *newList);
  1109.  
  1110. /*
  1111. ******************************************************************************
  1112.     
  1113.     BSBlockListAddRange - Appends a new range to an existing block list
  1114.     
  1115.     Inputs:        appendList - the list to add the new range to
  1116.                 startingOffset - the offset, in bytes on the device of the
  1117.                     start of the range
  1118.                 length - the length, in bytes, of the range
  1119.     
  1120.     Outputs:    <none>
  1121.     
  1122.     Returns:    E_BSSuccess if successful
  1123.     
  1124.  *****************************************************************************
  1125. */
  1126. extern OSStatus BSBlockListAddRange(BSBlockListRef appendList, BSByteCount startingOffset, ByteCount length);
  1127.  
  1128. /*
  1129. ******************************************************************************
  1130.     
  1131.     BSBlockListFinalize - creates a descriptor to be used in a Block Storage
  1132.         read or write call from the memory list.  After this call has been made
  1133.         no more ranges may be added to the list.
  1134.     
  1135.     Inputs:        finalizeList - the list to be finalized
  1136.     
  1137.     Outputs:    newDescriptor - the descriptor, to be used in a read/write call
  1138.     
  1139.     Returns:    E_BSSuccess if successful
  1140.     
  1141.  *****************************************************************************
  1142. */
  1143. extern OSStatus BSBlockListFinalize(BSBlockListRef finalizeList, BSBlockListDescriptorRef *newDescriptor);
  1144.  
  1145. /*
  1146. ******************************************************************************
  1147.  
  1148.     BSBlockListDelete - Removes a Block List.  All resources
  1149.         associated with this Block List are relinquished.  This includes memory
  1150.         which was prepared for any of its descriptors.  All descriptors are
  1151.         invalidated.  This call should only be used to clean-up Block Lists
  1152.         in an abort condition.  In normal usage, use BSBlockListDescriptorDelete
  1153.         to remove all descriptors and free the Block List.
  1154.  
  1155.     Inputs:        deleteList - the descriptor to delete
  1156.  
  1157.     Outputs:    <none>
  1158.  
  1159.     Returns:    E_BSSuccess if successful
  1160.  
  1161.  *****************************************************************************
  1162. */
  1163. extern OSStatus BSBlockListDelete(BSBlockListRef deleteList);
  1164.  
  1165. /*
  1166. ******************************************************************************
  1167.  
  1168.     BSBlockListDescriptorDelete - Removes a Block List Descriptor.  All resources
  1169.         associated with this descriptor are relinquished.  This includes memory
  1170.         which was prepared for this descriptor.  If this was the last descriptor
  1171.         for a BlockList the BlockList is free'd also.
  1172.  
  1173.     Inputs:        deleteDescriptor - the descriptor to delete
  1174.  
  1175.     Outputs:    <none>
  1176.  
  1177.     Returns:    E_BSSuccess if successful
  1178.  
  1179.  *****************************************************************************
  1180. */
  1181. extern OSStatus BSBlockListDescriptorDelete(BSBlockListDescriptorRef deleteDescriptor);
  1182.  
  1183. /*
  1184. ******************************************************************************
  1185.  
  1186.     BSBlockListDescriptorSeek - Changes the offset within the Block List descriptor
  1187.  
  1188.     Inputs:        seekDescriptor - the descriptor to seek within
  1189.                 whence - how to seek
  1190.                 offset - where to seek
  1191.  
  1192.     Outputs:    newOffset - what the current offset is now
  1193.  
  1194.     Returns:    E_BSSuccess if successful
  1195.  
  1196.  *****************************************************************************
  1197. */
  1198. extern OSStatus BSBlockListDescriptorSeek(BSBlockListDescriptorRef seekDescriptor, BSBlockListWhence whence, SInt64 offset, BSByteCount *newOffset);
  1199.  
  1200. /*
  1201. ******************************************************************************
  1202.  
  1203.     BSBlockListGetExtent - Gets an extent at the current offset for up to the
  1204.         specified length
  1205.  
  1206.     Inputs:        srcDesriptor - the descriptor to get the extent from
  1207.                 requestedLen - how long an extent to try to get
  1208.  
  1209.     Outputs:    startingByte - the starting byte address in the device of the
  1210.                     extent
  1211.                 extentLen - how long an extent within the descriptor was found
  1212.  
  1213.     Returns:    E_BSSuccess if successful
  1214.  
  1215.  *****************************************************************************
  1216. */
  1217. extern OSStatus BSBlockListDescriptorGetExtent(BSBlockListDescriptorRef srcDescriptor, ByteCount requestedLen, BSByteCount *startingByte, ByteCount *extentLen);
  1218.  
  1219. /*
  1220. ******************************************************************************
  1221.  
  1222.     BSBlockListAddSimpleDescriptor - adds a new descriptor to a block list.  The
  1223.         new descriptor begins at the current offset of the srcDescriptor.  The
  1224.         offset of the srcDescriptor is updated to point at the first byte after
  1225.         the end of the new descriptor.
  1226.  
  1227.     Inputs:        srcDescriptor - the descriptor to base the new descriptor upon
  1228.                 length - how much the new descriptor should cover
  1229.                 bias - the bias offset to be applied to the block address of
  1230.                     srcDescriptor.  When addresses are retrieve from newDescriptor
  1231.                     bias will be added.
  1232.  
  1233.     Outputs:    newDescriptor - the new descriptor
  1234.  
  1235.     Returns:    E_BSSucess if successful
  1236.  
  1237.  *****************************************************************************
  1238. */
  1239. extern OSStatus BSBlockListAddSimpleDescriptor(BSBlockListDescriptorRef srcDescriptor, BSByteCount length, BSByteCount bias, BSBlockListDescriptorRef *newDescriptor);
  1240.  
  1241. /*
  1242. ******************************************************************************
  1243.  
  1244.     BSBlockListDescriptorGetInfo - returns information about the specified
  1245.                 descriptor
  1246.  
  1247.     Inputs:        infoDescriptor - the descriptor to get information about
  1248.  
  1249.     Outputs:    info - the information
  1250.  
  1251.     Returns:    E_BSSuccess if successful
  1252.  
  1253.  *****************************************************************************
  1254. */
  1255. extern OSStatus BSBlockListDescriptorGetInfo(BSBlockListDescriptorRef infoDescriptor, BSBlockListDescriptorInfo *info);
  1256.  
  1257. /*
  1258. ******************************************************************************
  1259.  
  1260.     BSBlockListDescriptorCheckBlockSizes - checks the extents specified by the
  1261.         descriptor and ensures that all start at 0 mod blockSize and are 
  1262.         0 mod blockSize in length.   
  1263.  
  1264.     Inputs:        checkDescriptor - the descriptor to check
  1265.                 blockSize - the block size to check for
  1266.                 
  1267.     Outputs:    <none>
  1268.  
  1269.     Returns:    E_BSSuccess if successful
  1270.                 E_BSBlockListBadBlockSize if any extents are mis-aligned
  1271.  
  1272.  *****************************************************************************
  1273. */
  1274. extern OSStatus BSBlockListDescriptorCheckBlockSizes(BSBlockListDescriptorRef checkDescriptor, UInt32 blockSize);
  1275.  
  1276. /*
  1277. ******************************************************************************
  1278.  
  1279.     BSBlockListDescriptorCheckBounds - checks the extents specified by the
  1280.         descriptor and ensures that none specify addresses beyond bound
  1281.  
  1282.     Inputs:        checkDescriptor - the descriptor to check
  1283.                 bound - the highest allowable address
  1284.                 
  1285.     Outputs:    <none>
  1286.  
  1287.     Returns:    E_BSSuccess if successful
  1288.                 E_BSBlockListBadBlockSize if any extents are mis-aligned
  1289.  
  1290.  *****************************************************************************
  1291. */
  1292. extern OSStatus BSBlockListDescriptorCheckBounds(BSBlockListDescriptorRef checkDescriptor, BSByteCount bound);
  1293.  
  1294. /*
  1295. ****************************************************************************
  1296.  *****************************************************************************
  1297.  
  1298.     Block Storage I/O Operations
  1299.     
  1300.  *****************************************************************************
  1301.  ***************************************************************************
  1302. */
  1303. /*
  1304. ******************************************************************************
  1305.  
  1306.     BSStoreConnRead - reads data from the Store indicated by the Connection.
  1307.         This is the simple version of the call, taking only a single range
  1308.  
  1309.     Inputs:        readConnection - the connection to the Store to be read from
  1310.                 startingOffset - the 64-bit offset into the device to start the
  1311.                         read at
  1312.                 bytesToRead - the 32-bit, unsigned, number of bytes to read
  1313.                 
  1314.     Outputs:    buffer - filled in with the bytes read
  1315.  
  1316.     Returns:    E_BSSuccess if successful
  1317.                 E_BSBadConnection if the connection ID has problems
  1318.                 E_BSMPIOutOfStoreBounds if the request exceeds the boundaries of 
  1319.                     the Store
  1320.                 E_BSMPIUnitNotResponding if the device does not respond
  1321.                 E_BSMPITransferError if some error was detected during the transfer
  1322.                 E_BSMPIMemoryAccessFault if the destination memory was not accessible
  1323.                 E_BSMPIOutOfResources if a necessary resource (usually memory) could
  1324.                     not be allocated
  1325.                 E_BSMPIMediaRemoved if the media was removed
  1326.  
  1327.  *****************************************************************************
  1328. */
  1329. extern OSStatus BSStoreConnRead(BSStoreConnID readConnection, BSByteCount startingOffset, ByteCount bytesToRead, void *buffer);
  1330.  
  1331. /*
  1332. ******************************************************************************
  1333.  
  1334.     BSStoreConnWrite - writes data to the Store a Connection indicates.  This is
  1335.         the simple version of the call taking only a single range.
  1336.  
  1337.     Inputs:        writeConnection - the connection to the Store to be read from
  1338.                 srcMem - where the data is to be taken from
  1339.                 destBlocks - the blocks on the Store where the data is to be placed
  1340.  
  1341.     Outputs:    <none>
  1342.  
  1343.     Returns:    E_BSSuccess if successful
  1344.             E_BSBadConnection if the connection ID has problems
  1345.             E_BSMPIOutOfStoreBounds if the request exceeds the boundaries of 
  1346.                 the Store
  1347.             E_BSMPIUnitNotResponding if the device does not respond
  1348.             E_BSMPITransferError if some error was detected during the transfer
  1349.             E_BSMPIMemoryAccessFault if the destination memory was not accessible
  1350.             E_BSMPIOutOfResources if a necessary resource (usually memory) could
  1351.                 not be allocated
  1352.             E_BSMPIMediaRemoved if the media was removed
  1353.  
  1354.  *****************************************************************************
  1355. */
  1356. extern OSStatus BSStoreConnWrite(BSStoreConnID writeConnection, BSByteCount startingOffset, ByteCount bytesToWrite, void *buffer);
  1357.  
  1358. /*
  1359. ******************************************************************************
  1360.  
  1361.     BSStoreConnReadSG - reads data from the Store indicated by the Connection.
  1362.         This is the scatter/gather version of the call.  The Block List is
  1363.         generated by the calls above, the Memory List calls can be found in
  1364.         <MemoryLists.h>.
  1365.  
  1366.     Inputs:        readConnection - the connection to the Store to be read from
  1367.                 srcBlocks - a descriptor indicating the ranges on the device
  1368.                     to be read
  1369.                 destMemory - a Memory List descriptor indicating where the
  1370.                     data is to be placed
  1371.                     
  1372.     Outputs:    <none>
  1373.  
  1374.     Returns:    E_BSSuccess if successful
  1375.                 E_BSBadConnection if the connection ID has problems
  1376.                 E_BSMPIOutOfStoreBounds if the request exceeds the boundaries of 
  1377.                     the Store
  1378.                 E_BSMPIUnitNotResponding if the device does not respond
  1379.                 E_BSMPITransferError if some error was detected during the transfer
  1380.                 E_BSMPIMemoryAccessFault if the destination memory was not accessible
  1381.                 E_BSMPIOutOfResources if a necessary resource (usually memory) could
  1382.                     not be allocated
  1383.                 E_BSMPIMediaRemoved if the media was removed
  1384.  
  1385.  *****************************************************************************
  1386. */
  1387. extern OSStatus BSStoreConnReadSG(BSStoreConnID readConnection, BSBlockListDescriptorRef srcBlocks, MemListDescriptorRef destMemory);
  1388.  
  1389. /*
  1390. ******************************************************************************
  1391.  
  1392.     BSStoreConnWriteSG - writes data to the Store a Connection indicates.  This 
  1393.         is the scatter/gather version of the call.  The Block List is
  1394.         generated by the calls above, the Memory List calls can be found in
  1395.         <MemoryLists.h>.
  1396.  
  1397.     Inputs:        writeConnection - the connection to the Store to be read from
  1398.                 srcMem - where the data is to be taken from
  1399.                 destBlocks - the blocks on the Store where the data is to be placed
  1400.  
  1401.     Outputs:    <none>
  1402.  
  1403.     Returns:    E_BSSuccess if successful
  1404.             E_BSBadConnection if the connection ID has problems
  1405.             E_BSMPIOutOfStoreBounds if the request exceeds the boundaries of 
  1406.                 the Store
  1407.             E_BSMPIUnitNotResponding if the device does not respond
  1408.             E_BSMPITransferError if some error was detected during the transfer
  1409.             E_BSMPIMemoryAccessFault if the destination memory was not accessible
  1410.             E_BSMPIOutOfResources if a necessary resource (usually memory) could
  1411.                 not be allocated
  1412.             E_BSMPIMediaRemoved if the media was removed
  1413.  
  1414.  *****************************************************************************
  1415. */
  1416. extern OSStatus BSStoreConnWriteSG(BSStoreConnID writeConnection, MemListDescriptorRef srcMemory, BSBlockListDescriptorRef destBlocks);
  1417.  
  1418. /*
  1419. ******************************************************************************
  1420.  
  1421.     BSStoreConnReadAsync - reads data from the Store indicated by the Connection.
  1422.         This is the asynchronous version of the simple call, taking only a 
  1423.         single range.
  1424.  
  1425.     Inputs:        readConnection - the connection to the Store to be read from
  1426.                 startingOffset - the 64-bit offset into the device to start the
  1427.                         read at
  1428.                 bytesToRead - the 32-bit, unsigned, number of bytes to read
  1429.                 notification - how the calling app wishes to be notified
  1430.                 
  1431.     Outputs:    buffer - filled in with the bytes read
  1432.  
  1433.     Returns:    E_BSSuccess if successful
  1434.                 E_BSBadConnection if the connection ID has problems
  1435.                 E_BSMPIOutOfStoreBounds if the request exceeds the boundaries of 
  1436.                     the Store
  1437.                 E_BSMPIUnitNotResponding if the device does not respond
  1438.                 E_BSMPITransferError if some error was detected during the transfer
  1439.                 E_BSMPIMemoryAccessFault if the destination memory was not accessible
  1440.                 E_BSMPIOutOfResources if a necessary resource (usually memory) could
  1441.                     not be allocated
  1442.                 E_BSMPIMediaRemoved if the media was removed
  1443.  
  1444.  *****************************************************************************
  1445. */
  1446. extern OSStatus BSStoreConnReadAsync(BSStoreConnID readConnection, BSByteCount startingOffset, ByteCount bytesToRead, KernelNotification *notification, void *buffer);
  1447.  
  1448. /*
  1449. ******************************************************************************
  1450.  
  1451.     BSStoreConnWriteAsync - writes data to the Store a Connection indicates.  
  1452.         This is the asynchronous version of the simple call, taking only a
  1453.         single range.
  1454.  
  1455.     Inputs:        writeConnection - the connection to the Store to be read from
  1456.                 srcMem - where the data is to be taken from
  1457.                 destBlocks - the blocks on the Store where the data is to be placed
  1458.                 notification - how the caller wishes to be notified
  1459.                 
  1460.     Outputs:    bytesWritten - the number of bytes written
  1461.                 (srcMem must remain a valid memory area until 
  1462.                 notification of completion is received)
  1463.  
  1464.     Returns:    E_BSSuccess if successful
  1465.             E_BSBadConnection if the connection ID has problems
  1466.             E_BSMPIOutOfStoreBounds if the request exceeds the boundaries of 
  1467.                 the Store
  1468.             E_BSMPIUnitNotResponding if the device does not respond
  1469.             E_BSMPITransferError if some error was detected during the transfer
  1470.             E_BSMPIMemoryAccessFault if the destination memory was not accessible
  1471.             E_BSMPIOutOfResources if a necessary resource (usually memory) could
  1472.                 not be allocated
  1473.             E_BSMPIMediaRemoved if the media was removed
  1474.  
  1475.  *****************************************************************************
  1476. */
  1477. extern OSStatus BSStoreConnWriteAsync(BSStoreConnID writeConnection, BSByteCount startingOffset, ByteCount bytesToWrite, KernelNotification *notification, void *buffer);
  1478.  
  1479. /*
  1480. ******************************************************************************
  1481.  
  1482.     BSStoreConnReadSGAsync - reads data from the Store indicated by the Connection.
  1483.         This is the asynchronous version of the scatter/gather  call.  
  1484.         The Block List is generated by the calls above, the Memory List calls 
  1485.         can be found in <MemoryLists.h>.
  1486.  
  1487.     Inputs:        readConnection - the connection to the Store to be read from
  1488.                 srcBlocks - a descriptor indicating the ranges on the device
  1489.                     to be read
  1490.                 destMemory - a Memory List descriptor indicating where the
  1491.                     data is to be placed
  1492.                 notification - how the caller wishes to be notified
  1493.                     
  1494.     Outputs:    <none>
  1495.  
  1496.     Returns:    E_BSSuccess if successful
  1497.                 E_BSBadConnection if the connection ID has problems
  1498.                 E_BSMPIOutOfStoreBounds if the request exceeds the boundaries of 
  1499.                     the Store
  1500.                 E_BSMPIUnitNotResponding if the device does not respond
  1501.                 E_BSMPITransferError if some error was detected during the transfer
  1502.                 E_BSMPIMemoryAccessFault if the destination memory was not accessible
  1503.                 E_BSMPIOutOfResources if a necessary resource (usually memory) could
  1504.                     not be allocated
  1505.                 E_BSMPIMediaRemoved if the media was removed
  1506.  
  1507.  *****************************************************************************
  1508. */
  1509. extern OSStatus BSStoreConnReadSGAsync(BSStoreConnID readConnection, BSBlockListDescriptorRef srcBlocks, MemListDescriptorRef destMemory, KernelNotification *notification);
  1510.  
  1511. /*
  1512. ******************************************************************************
  1513.  
  1514.     BSStoreConnWriteSGAsync - writes data to the Store a Connection indicates. 
  1515.         This is the asynchronous version of the scatter/gather call.  The 
  1516.         Block List is generated by the calls above, the Memory List calls can
  1517.         be found in <MemoryLists.h>.
  1518.  
  1519.     Inputs:        writeConnection - the connection to the Store to be read from
  1520.                 srcMem - where the data is to be taken from
  1521.                     (the memory areas indicated by srcMem must remain valid until 
  1522.                     notification is received)
  1523.                 destBlocks - the blocks on the Store where the data is to be placed
  1524.                 notification - how the caller wishes to be notified of completion
  1525.                 
  1526.     Outputs:    <none>
  1527.                 
  1528.  
  1529.     Returns:    E_BSSuccess if successful
  1530.             E_BSBadConnection if the connection ID has problems
  1531.             E_BSMPIOutOfStoreBounds if the request exceeds the boundaries of 
  1532.                 the Store
  1533.             E_BSMPIUnitNotResponding if the device does not respond
  1534.             E_BSMPITransferError if some error was detected during the transfer
  1535.             E_BSMPIMemoryAccessFault if the destination memory was not accessible
  1536.             E_BSMPIOutOfResources if a necessary resource (usually memory) could
  1537.                 not be allocated
  1538.             E_BSMPIMediaRemoved if the media was removed
  1539.  
  1540.  *****************************************************************************
  1541. */
  1542. extern OSStatus BSStoreConnWriteSGAsync(BSStoreConnID writeConnection, MemListDescriptorRef srcMemory, BSBlockListDescriptorRef destBlocks, KernelNotification *notification);
  1543.  
  1544. /*
  1545. ******************************************************************************
  1546.  
  1547.     BSStoreConnFlush - Flushes caches for this Store and any Stores this Store
  1548.         is derived from.
  1549.  
  1550.     Inputs:        flushConnection - the connection to the Store to be flushed
  1551.  
  1552.     Outputs:    <none>
  1553.                 
  1554.  
  1555.     Returns:    E_BSSuccess if successful
  1556.             E_BSBadConnection if the connection ID has problems
  1557.             E_BSMPIUnitNotResponding if the device does not respond
  1558.             E_BSMPITransferError if some error was detected during the transfer
  1559.             E_BSMPIMemoryAccessFault if the destination memory was not accessible
  1560.             E_BSMPIOutOfResources if a necessary resource (usually memory) could
  1561.                 not be allocated
  1562.             E_BSMPIMediaRemoved if the media was removed
  1563.  
  1564.  *****************************************************************************
  1565. */
  1566. extern OSStatus BSStoreConnFlush(BSStoreConnID flushConnection);
  1567.  
  1568. /*
  1569. ****************************************************************************
  1570.  *****************************************************************************
  1571.  
  1572.     Block Storage Accessibility Operations
  1573.     
  1574.  *****************************************************************************
  1575.  ***************************************************************************
  1576. */
  1577. /*
  1578. ******************************************************************************
  1579.  
  1580.     BSStoreConnGoToAccessibilityState - requests that a Store change its
  1581.         accessibility state to the one desired
  1582.  
  1583.     Inputs:        connection - connection to the Store to change state
  1584.                 newState - the desired state
  1585.  
  1586.     Outputs:    <none>
  1587.  
  1588.     Returns:    E_BSSuccess if successful
  1589.  
  1590.  *****************************************************************************
  1591. */
  1592. extern OSStatus BSStoreConnGoToAccessibilityState(BSStoreConnID connection, BSAccessibilityState newState);
  1593.  
  1594. /*
  1595. ******************************************************************************
  1596.  
  1597.     BSContainerConnGoToAccessibilityState - requests that a Container change 
  1598.         its accessibility state to the one desired
  1599.  
  1600.     Inputs:        connection - connection to the Container to change state
  1601.                 newState - the desired state
  1602.  
  1603.     Outputs:    <none>
  1604.  
  1605.     Returns:    E_BSSuccess if successful
  1606.  
  1607.  *****************************************************************************
  1608. */
  1609. extern OSStatus BSContainerConnGoToAccessibilityState(BSContainerConnID connection, BSAccessibilityState newState);
  1610.  
  1611. /*
  1612. ****************************************************************************
  1613.  *****************************************************************************
  1614.  
  1615.     Block Storage Configuration
  1616.     
  1617.  *****************************************************************************
  1618.  ***************************************************************************
  1619. */
  1620. /*
  1621. ******************************************************************************
  1622.  
  1623.     BSStoreConnGetInfo - gets information about the Store a Connection indicates
  1624.  
  1625.     Inputs:        infoConnection - the connection to the Store we want info about
  1626.  
  1627.     Outputs:    infoBuffer - the information about the Store
  1628.  
  1629.     Returns:    E_BSSuccess if successful
  1630.                 E_BSBadConnection if the connection ID has problems
  1631.  
  1632.  *****************************************************************************
  1633. */
  1634. extern OSStatus BSStoreConnGetInfo(BSStoreConnID infoConnection, BSStoreInfo *infoBuffer);
  1635.  
  1636. /*
  1637. ******************************************************************************
  1638.  
  1639.     BSStoreCreate - creates a new Store.  The Store is not added into the Block 
  1640.                     Storage Name Store hierarchy.
  1641.  
  1642.     Inputs:        <none>
  1643.  
  1644.     Outputs:    newStore - the ID of the new Store 
  1645.                 newStoreConnection    - a connection to the created Store
  1646.  
  1647.     Returns:    E_BSSuccess on success
  1648.                 E_BSENoMoreStores if no more Stores can be allocated
  1649.                 E_BSOutOfResources if other resources cannot be allocated
  1650.  
  1651.  *****************************************************************************
  1652. */
  1653. extern OSStatus BSStoreCreate(BSStoreID *newStore, BSStoreConnID *newStoreConnection);
  1654.  
  1655. /*
  1656. ******************************************************************************
  1657.  
  1658.     BSStoreConnDeleteAndClose - deletes the Store the current connection 
  1659.         references and closes the connection
  1660.  
  1661.     Inputs:        connection - the connection to the Store to be deleted
  1662.  
  1663.     Outputs:    <none>
  1664.     Returns:    E_BSSuccess on success
  1665.                 E_BSStoreInUse if other connections are open to the Store
  1666.  
  1667.  *****************************************************************************
  1668. */
  1669. extern OSStatus BSStoreConnDeleteAndClose(BSStoreConnID connection);
  1670.  
  1671. /*
  1672. ******************************************************************************
  1673.  
  1674.     BSStoreConnSetPartitionInfo - Sets data in a partition map entry on a Store
  1675.  
  1676.     Inputs:        storeConnection - the connection to the Store
  1677.                 partitionNum - the partition map entry to be set
  1678.                 partitionInfo - a pointer to the new partition map entry info
  1679.  
  1680.     Returns:    E_BSSuccess if successful
  1681.                 E_BSBadConnection if the connection ID has problems
  1682.                 E_BSPPINoPlugIn if the Store does not have a Partitioning Plug-in
  1683.                 E_BSPPIOverlappingPartition if the requested partition overlaps
  1684.                     another
  1685.                 E_BSPPIOutOfStoreBounds if the request partition exceeds the limits
  1686.                     of the Store
  1687.  
  1688.  *****************************************************************************
  1689. */
  1690. extern OSStatus BSStoreConnSetPartitionInfo(BSStoreConnID storeConnection, ItemCount partitionNum, BSPartitionDescriptor *partitionInfo);
  1691.  
  1692. /*
  1693. ******************************************************************************
  1694.  
  1695.     BSStoreConnSetPartitionInfo - Gets data in a partition map entry on a Store
  1696.  
  1697.     Inputs:        storeConnection - the connection to the Store
  1698.                 partitionNum - the partition map entry to be retrieved
  1699.                 partitionInfo - a pointer to the partition map entry info buffer
  1700.  
  1701.     Returns:    E_BSSuccess if successful
  1702.                 E_BSBadConnection if the connection ID has problems
  1703.                 E_BSPPINoPlugIn if the Store does not have a Partitioning Plug-in
  1704.  
  1705.  *****************************************************************************
  1706. */
  1707. extern OSStatus BSStoreConnGetPartitionInfo(BSStoreConnID connection, ItemCount partitionNum, BSPartitionDescriptor *partitionInfo);
  1708.  
  1709. /*
  1710. ******************************************************************************
  1711.  
  1712.     BSStoreConnMapPartition - Maps a partition from a Store onto another Store
  1713.  
  1714.     Inputs:        srcConnection - the connection to the source Store
  1715.                 partitionNum - the partition to be mapped
  1716.                 destConnection - the connection to the destination Store
  1717.                 destStartingBlock - where in the destination Store the mapped 
  1718.                     partition should be placed
  1719.  
  1720.     Returns:    E_BSSuccess if successful
  1721.                 E_BSBadConnection if the connection ID has problems
  1722.                 E_BSPPINoPlugIn if the Store does not have a Partitioning Plug-in
  1723.                 E_BSPPIMappingNotSupported if the mapping is not supported by either
  1724.                     Store
  1725.                 E_BSPPIPartitionNonExistant if the source partition doesn't exist
  1726.                  E_BSEHierarchyTooDeep if this would create too many layers in the
  1727.                     hierarchy (currently limited to 8)
  1728. *****************************************************************************
  1729. */
  1730. extern OSStatus BSStoreConnMapPartition(BSStoreConnID srcConnection, ItemCount partitionNum, BSStoreConnID destConnection, BSByteCount startingByte);
  1731.  
  1732. /*
  1733. ******************************************************************************
  1734.  
  1735.     BSStoreConnGetComponents - Gets the components of a Store.
  1736.  
  1737.     Inputs:        connection - the connection to the Store
  1738.                 tableSize - size of the table to be filled in
  1739.                 componentInfo - a pointer to an array of BSStoreComponentInfos 
  1740.                     to be filled in
  1741.  
  1742.     Returns:    E_BSSuccess if successful
  1743.             E_BSBadConnection if the connection ID has problems
  1744.  *****************************************************************************
  1745. */
  1746. extern OSStatus BSStoreConnGetComponents(BSStoreConnID connection, ItemCount tableSize, BSStoreComponent *componentInfo);
  1747.  
  1748. /*
  1749. ******************************************************************************
  1750.  
  1751.     BSStoreConnMapDevice - Maps an entire device into a Store
  1752.  
  1753.     Inputs:        srcDevice - the Name Registry ID of the device
  1754.                 destConnection - the connection to the destination Store
  1755.  
  1756.     Returns:    E_BSSuccess if successful
  1757.                 E_BSBadConnection if the connection ID has problems
  1758.  *****************************************************************************
  1759. */
  1760. extern OSStatus BSStoreConnMapDevice(RegEntryRef srcDevice, BSStoreConnID destConnection);
  1761.  
  1762. /*
  1763. ******************************************************************************
  1764.  
  1765.     BSStoreConnAssociateMappingPlugin - Attaches a Mapping Plug-in to a Store
  1766.  
  1767.     Inputs:        connection - the connection to the Store
  1768.                 mappingPlugin - the identifier of the Plugin to be attached
  1769.     Returns:    E_BSSuccess if successful
  1770.                 E_BSBadConnection if the connection ID has problems
  1771.                 E_BSEPlugInNotFound if the plugin specified can't be found
  1772.  *****************************************************************************
  1773. */
  1774. extern OSStatus BSStoreConnAssociateMappingPlugin(BSStoreConnID connection, BSMappingPlugInRef mappingPlugin);
  1775.  
  1776. /*
  1777. ******************************************************************************
  1778.  
  1779.     BSStoreConnAssociatePartitioningPlugin - Attaches a Partitioning Plug-in to 
  1780.         a Store
  1781.  
  1782.     Inputs:        connection - the connection to the Store
  1783.                 mappingPlugin - the identifier of the Plugin to be attached
  1784.     Returns:    E_BSSuccess if successful
  1785.                 E_BSBadConnection if the connection ID has problems
  1786.                 E_BSEPlugInNotFound if the plugin specified can't be found
  1787.  *****************************************************************************
  1788. */
  1789. extern OSStatus BSStoreConnAssociatePartitioningPlugin(BSStoreConnID connection, BSPartitioningPlugInRef mappingPlugin);
  1790.  
  1791. /*
  1792. ******************************************************************************
  1793.  
  1794.     BSStoreConnPublish - makes a Store available for general use
  1795.  
  1796.     Inputs:        connection - the connection to the Store
  1797.     Returns:    E_BSSuccess if successful
  1798.                 E_BSBadConnection if the connection ID has problems
  1799.  *****************************************************************************
  1800. */
  1801. extern OSStatus BSStoreConnPublish(BSStoreConnID connection);
  1802.  
  1803. /*
  1804. ******************************************************************************
  1805.  
  1806.     BSStoreConnUnpublish - removes a Store from general use
  1807.  
  1808.     Inputs:        connection - the connection to the Store
  1809.     Returns:    E_BSSuccess if successful
  1810.                 E_BSBadConnection if the connection ID has problems
  1811.  *****************************************************************************
  1812. */
  1813. extern OSStatus BSStoreConnUnpublish(BSStoreConnID connection);
  1814.  
  1815. /*
  1816. ******************************************************************************
  1817.  
  1818.     BSStoreConnFormat - formats a Store in the specified format
  1819.  
  1820.     Inputs:        connection - the connection to the Store
  1821.                 formatType - the format number from possibleFormats in the
  1822.                     BSStoreInfo structure
  1823.                     
  1824.     Returns:    E_BSSuccess if successful
  1825.                 E_BSBadConnection if the connection ID has problems
  1826.  *****************************************************************************
  1827. */
  1828. extern OSStatus BSStoreConnFormat(BSStoreConnID connection, BSFormatIndex formatType);
  1829.  
  1830. /*
  1831. ******************************************************************************
  1832.  
  1833.     BSContainerConnGetInfo - gets information about the Container  a Connection indicates
  1834.  
  1835.     Inputs:        infoConnection - the connection to the Container we want info about
  1836.  
  1837.     Outputs:    infoBuffer - the information about the Container
  1838.  
  1839.     Returns:    E_BSSuccess if successful
  1840.                 E_BSBadConnection if the connection ID has problems
  1841.  
  1842.  *****************************************************************************
  1843. */
  1844. extern OSStatus BSContainerConnGetInfo(BSContainerConnID infoConnection, BSContainerInfo *infoBuffer);
  1845.  
  1846. /*
  1847. ******************************************************************************
  1848.  
  1849.     BSContainerCreate - Creates a new Container.  The Container is not added 
  1850.         into the Block Storage Container Hierarchy
  1851.  
  1852.     Inputs:        <none>
  1853.  
  1854.     Outputs:    newContainer - a connection to the newly created Container
  1855.  
  1856.     Returns:    E_BSSuccess if successful
  1857.  
  1858.  *****************************************************************************
  1859. */
  1860. extern OSStatus BSContainerCreate(BSContainerConnID *newContainer);
  1861.  
  1862. /*
  1863. ******************************************************************************
  1864.  
  1865.     BSContainerConnDeleteAndClose - deletes the Container and closes the 
  1866.         connection to it.  No other connections to the Container may be open.
  1867.  
  1868.     Inputs:        deleteContainer - connection to the Container to be deleted    
  1869.  
  1870.     Outputs:    <none>
  1871.  
  1872.     Returns:    E_BSSuccess if successful
  1873.  
  1874.  *****************************************************************************
  1875. */
  1876. extern OSStatus BSContainerConnDeleteAndClose(BSContainerConnID deleteContainer);
  1877.  
  1878. /*
  1879. ******************************************************************************
  1880.  
  1881.     BSContainerConnInsertContainer - inserts a Container into another Container
  1882.  
  1883.     Inputs:        destContainer - a connection to the Container to insert into
  1884.                 insertContainer - connection to the Container to be inserted
  1885.  
  1886.     Outputs:    <none>
  1887.  
  1888.     Returns:    E_BSSuccess if successful
  1889.  
  1890.  *****************************************************************************
  1891. */
  1892. extern OSStatus BSContainerConnInsertContainer(BSContainerConnID destContainer, BSContainerConnID putContainer);
  1893.  
  1894. /*
  1895. ******************************************************************************
  1896.  
  1897.     BSContainerConnPublish - makes a Container available for use.  Generates
  1898.         notifications as necessary
  1899.  
  1900.     Inputs:        publishContainer - connection to the Container to be published
  1901.  
  1902.     Outputs:    <none>
  1903.  
  1904.     Returns:    E_BSSuccess if successful
  1905.  
  1906.  *****************************************************************************
  1907. */
  1908. extern OSStatus BSContainerConnPublish(BSContainerConnID publishContainer);
  1909.  
  1910. /*
  1911. ******************************************************************************
  1912.  
  1913.     BSContainerConnUnpublish - removes a Container from general accessibility,
  1914.         does not delete it.  The Container must not have any open connections or
  1915.         published children.
  1916.  
  1917.     Inputs:        unpublishContainer - the Container to unpublish
  1918.  
  1919.     Outputs:    <none>
  1920.  
  1921.     Returns:    E_BSSuccess if successful
  1922.  
  1923.  *****************************************************************************
  1924. */
  1925. extern OSStatus BSContainerConnUnpublish(BSContainerConnID unpublishContainer);
  1926.  
  1927. /*
  1928. ******************************************************************************
  1929.  
  1930.     BSContainerConnSetDevice - sets the device the Container plug-in will 
  1931.         associate with.  Should be called before BSContainerConnAssociatePlugIn
  1932.         for bare Containers.
  1933.  
  1934.     Inputs:        connection - a connection to the Container we're associating
  1935.                     the plug-in with
  1936.                 deviceNode - the device the Container plug-in will interact with
  1937.  
  1938.     Outputs:    <none>
  1939.  
  1940.     Returns:    E_BSSuccess if successful
  1941.  
  1942.  *****************************************************************************
  1943. */
  1944. extern OSStatus BSContainerConnSetDevice(BSContainerConnID connection, RegEntryRef deviceNode);
  1945.  
  1946. /*
  1947. ******************************************************************************
  1948.  
  1949.     BSContainerConnAssociatePlugIn - Associates a Container plug-in with a
  1950.         Container
  1951.  
  1952.     Inputs:        connection - a connection to the Container we're associating
  1953.                     the plug-in with
  1954.                 plugIn - the new plug in to be associated
  1955.  
  1956.     Outputs:    <none>
  1957.  
  1958.     Returns:    E_BSSuccess if successful
  1959.  
  1960.  *****************************************************************************
  1961. */
  1962. extern OSStatus BSContainerConnAssociatePlugIn(BSContainerConnID connection, BSContainerPlugInRef plugIn);
  1963.  
  1964. #endif
  1965.  
  1966. #pragma options align=reset
  1967. #endif /* PRAGMA_ALIGN_SUPPORTED */
  1968.  
  1969. #if PRAGMA_IMPORT_SUPPORTED
  1970. #pragma import off
  1971. #endif
  1972.  
  1973. #ifdef __cplusplus
  1974. }
  1975. #endif
  1976.  
  1977. #endif /* __BLOCKSTORAGE__ */
  1978.  
  1979.